<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- 
    1、选择题
        (1)  D
        (2)  c
        (3)  true   false  false
        (4)  B
        (5)  c
    2、填空题
        第 1 题
            (1)获取：getElementById()、querySelect()、firstChild()、lastChild()
            (2)创造：creatElement()、creatTextNode()
            (3)添加：append()、appendChild()
            (4)替换：replaceChild ()
            (5)删除：remove()、removeChild()
        第 2 题
            (1)Object.prototype
            (2)Function.prototype  、Object.prototype
            (3)Array.prototype  、Object.prototype
            (4)Function.prototype
            (5)null
            (6)Function.prototype
            (7)Boolean.prototype
            (8)Object.prototype
    3. 描述题
        (1)ajax是一种用于创建快速动态网页的技术,在不重新加载整个页面的情况下，可以与服务器交换数据并更新部分网页内容。
        (2)这个 this有__proto__属性、this 的原型有constructor属性、__proto__属性
        (3)主线程任务全部执行完之后，任务队列中的回调函数会再次回到调用栈中执行
        (4)原型：每个函数都有一个prototype属性，它默认指向一个Object空对象(即称为: 原型对象)，这个对象包含了通过构造函数所创建的实例对象共享的属性和方法。 
                作用：共享的属性和方法
            原型链：实例对象(proto)与原型(prototype)之间的连接，叫原型链
    4.逻辑题
        (1)Goodbye Jack
        (2)10
        (3)21
        (4)667
        (5)undefined  Jack
        (6)Jack HanMeiMei   
        (7)1   报错test is not a function  2
     5.实操题
        第 1 题
             ES5 中用构造函数模拟一个类
                function A(name,age){
                    this.name=name
                    this.age=age
                }

                function B(name,age){
                    A.apply(this,arguments)
                }
                function Obj(){}
                Obj.prototype = A.prototype
                B.prototype = new Obj()
                B.prototype.constructor=B
                B.prototype.Fn = function () {
                    console.log("我是:"+this.name);
                }

                let C = new B('c',13)
                C.Fn()

             ES6通过class关键字作为定义类
               class A{
                    constructor(name){
                        this.name=name
                    }
                    Fn(){
                        console.log('我是:'+this.name);
                    }
                }

                class B extends A{
                    constructor(name,age){
                        super(name)
                        this.age=age
                    }
                }
                let b = new B('b',18)
                b.Fn()
        第 2 题
            function ajax(_url){
                return new Promise((res, rej) => {
                    let xhr = new XMLHttpRequest();
                    xhr.open('GET', _url);
                    xhr.send();
                    xhr.addEventListener("readystatechange", () => {
                        if (xhr.readyState == 4) {
                            if (xhr.status == 200) {
                                res(JSON.parse(xhr.responseText));
                            } else {
                                rej(JSON.parse(xhr.responseText));
                            }
                        }
                    })
                })
            }
        第 3 题
            let arr = [1, 2, 5, 2, 4, 5, 10, 2, 5, 1, 2, 4, 5, 8, 6, 4];
            //方法一：Set
                let arr1 = [...new Set(arr)]
                console.log(arr1);
            //方法二：includes
                let arr2 = []
                arr.forEach((val,idx) => {
                    if(!arr2.includes(val)){
                        arr2.push(val)
                    }
                });
                console.log(arr2);
            //方法三：indexOf
                let arr3 = []
                arr.forEach((val,idx) => {
                    if(arr3.indexOf(val) === -1){
                        arr3.push(val)
                    }
                });
                console.log(arr3);
            //方法四：sort
            let arr4=[arr[0]]
            arr.sort()
            for(let i=1;i<arr.length;i++){
                (arr[i] !== arr[i-1])&&arr4.push(arr[i])
            }
            console.log(arr4);
    -->
</body>

</html>